Numerous electronic technologies such as digital computers, calculators, audio devices, video equipment, and telephone systems facilitate increased productivity and cost reduction in analyzing and communicating data, ideas and trends in most areas of business, science, education and entertainment. Frequently, these activities involve complex and complicated processing and how the information is processed (e.g., sequentially, in parallel, etc.) can impact performance. Conventional process or task execution is typically limited to one of a couple of pre-determined execution modes (e.g., sequential and parallel).
Different execution modes typically have different advantages and potential problems. Sequential programming is one of the original execution modes and is still used in many applications. Sequential programming is relatively straight forward, well understood and since the programs generally flow in a straight sequence, sequential programming does not usually involve complex timing coordination between different parts of the program. However, sequential programming is usually limited to performing one task at a time and can take a significant amount of time to complete the whole program. Parallel computing offers performance improvement in some applications by performing various operations substantially at the same time and has become one of the dominant paradigms in computer architectures (e.g., in multi-core processors, etc.) due to massively increased network size and attempts to solve increasingly difficult problems. While parallel computing can be beneficial in many applications, there are various aspects of parallel programming that can also be problematic and give rise to significant obstacles (e.g., more communication between components, synchronization between tasks, race conditions, usually more difficult to develop than sequential programming, etc.).
There are some conventional framework approaches, however, they typically have limitations such as limited to choosing one pre-determined framework at a time with a fixed execution mode. Once a pre-determination is made, the execution mode is not typically changed. The performance ability of a particular fixed pre-determined execution mode can vary under different circumstances (e.g., problem size, data arrangement, cache usage, etc.). Some traditional attempts try to extract parallelism, but often require added runtime and operating system (OS) extensions. There are a few other conventional approaches that use machine learning to map heuristic decisions, but these attempts are usually limited to pre-determination in compiler based auto-parallelization attempts that are often problematic (e.g., hard to handle irregular programs, do not adapt to input type, etc.).